package top.haijunit.work.modules.access.domain;

import lombok.Data;

import java.util.Objects;

/**
 * 用于权限合并的DTO
 *
 * @author zhanghaijun
 * @since 2024-08-20
 */
@Data
public class PermissionMerge implements Comparable<PermissionMerge> {

    /**
     * 角色编码
     */
    private String roleCode;
    /**
     * 角色名称
     */
    private String roleName;
    /**
     * 角色级别，越小优先级越高
     */
    private Integer roleLevel;


    /**
     * 权限编码
     */
    private Long permissionCode;
    /**
     * 权限状态，0拒绝，1允许
     */
    private Integer permissionStatus;
    /**
     * 权限级别，越小优先级越高
     */
    private Integer permissionLevel;


    @Override
    public int compareTo(PermissionMerge rolePermission) {
        // 角色的优先级高的排在前面
        if (!Objects.equals(this.getRoleLevel(), rolePermission.getRoleLevel())) {
            return Integer.compare(this.getRoleLevel(), rolePermission.getRoleLevel());
        }
        // 权限优先级高的排在前面
        if (!Objects.equals(this.getPermissionLevel(), rolePermission.getPermissionLevel())) {
            return Integer.compare(this.getPermissionLevel(), rolePermission.getPermissionLevel());
        }
        // 相同优先级，拒绝优先
        if (!Objects.equals(this.getPermissionStatus(), rolePermission.getPermissionStatus())) {
            if (this.getPermissionStatus() == 0) {
                return -1; // 当前对象是拒绝状态，排在前面
            } else if (rolePermission.getPermissionStatus() == 0) {
                return 1; // 参比对象是拒绝状态，排在前面
            }
        }
        return 0;
    }

}
